package com_3;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

@annotation(className="com_2.Demo1",methodName="show")
//将这个类作为注解的使用类，并给路径名称赋值，方法名赋值
public class AnnonationDemo {//定义注解测试类
    public static void main(String[] args) throws Exception {
        //main方法入口并抛出异常
        Class<AnnonationDemo> annonationDemoClass = AnnonationDemo.class;
        //获取类的class文件对象
        annotation annotation = annonationDemoClass.getAnnotation(annotation.class);
        //通过本类的对象获取注解的对象
        String classname = annotation.className();//再通过注解的对象调用注解中的方法，获取类的路径
        String methodname = annotation.methodName();//通过注解的对象调用注解中的抽象方法获取方法名称
        Class<?> c = Class.forName(classname);
        //拿到类的路径名称后获取具体类的class文件对象
        Constructor<?> cos = c.getConstructor();
        //获取无参数构造方法创建对象
        Object o = cos.newInstance();//创建具体类的对象

        Method m = c.getMethod(methodname);//获取注解中的方法
         m.invoke(o);//调用方法
    }
}
